<?php
require_once 'libs/jwt/JWT.php';
require_once 'libs/jwt/SignatureInvalidException.php';
require_once 'libs/jwt/BeforeValidException.php';
require_once 'libs/jwt/ExpiredException.php';
define('JWTKET', 'hll');
function jwt_token($data){
    $jwt = JWT::encode($data, JWTKET);
    return $jwt;
}
function get_jwt_token($jwt){
    $decoded = @JWT::decode($jwt, JWTKET, array('HS256'));
    $decoded_array = (array) $decoded;
    if ($decoded_array['state'] == 0) {
        $ret = ['code' => 400, 'is_token' => 0, 'info' => 'token已经失效！'];
        echo json_encode($ret);
        exit();
    }

    $user = user_get($decoded_array['id']);
    return $user;
}
function jwt_t(){
    $key = "example_key";
    $payload = array(
        "iss" => "http://example.org",
        "aud" => "http://example.com",
        "iat" => 1356999524,
        "nbf" => 1357000000
    );

    /**
     * IMPORTANT:
     * You must specify supported algorithms for your application. See
     * https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40
     * for a list of spec-compliant algorithms.
     */
    $jwt = JWT::encode($payload, $key);
    $decoded = JWT::decode($jwt, $key, array('HS256'));

    print_r($jwt);

    /*
     NOTE: This will now be an object instead of an associative array. To get
     an associative array, you will need to cast it as such:
    */

    $decoded_array = (array) $decoded;
    dump($decoded_array);

    /**
     * You can add a leeway to account for when there is a clock skew times between
     * the signing and verifying servers. It is recommended that this leeway should
     * not be bigger than a few minutes.
     *
     * Source: http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html#nbfDef
     */
    JWT::$leeway = 60; // $leeway in seconds
    $decoded = JWT::decode($jwt, $key, array('HS256'));
    dump($decoded);
}
